package com.itheima.dao;

import com.github.pagehelper.Page;
import com.itheima.pojo.BookingOrder;
import com.itheima.pojo.Member;
import com.itheima.pojo.Order;
import com.itheima.pojo.OrderSetting;
import org.apache.ibatis.annotations.Param;
import org.springframework.context.annotation.PropertySource;

import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public interface BookingOrderDao {
    //通过订单id查询预约订单所有信息
    Map<String,Object> findOrderById(Integer id);

    //根据分页查询
    Page selectByCondition(@Param("queryString") String queryString,
                           @Param("startDate") Date startDate, @Param("endDate") Date endDate,
                           @Param("queryOrderType")
            String queryOrderType, @Param("queryOrderStatus")  String queryOrderStatus);

    Long findCountByOrderId(Integer orderId);
    //删除方法
    void delete(Integer id);

    /*添加中间表信息*/
    void setOrderAndAddress(HashMap<String, Integer> map);


    //判断用户是否是会员的方法
    Member findMemberByPhone(String phoneNumber);
    //添加会员的方法
    void addNameAndPhone(Member member);
    //把预约信息存入数据库方法
    void addOrder(Order order);
    //添加地址和订单之间关系方法
    void addOrderAndAddress(@Param("orderId") Integer orderId,@Param("addressId") Integer addressId);
    //改变预约人数方法
    void editReservationsByOrderDate(OrderSetting orderSetting);
    //判断预约人数是否已满方法
    List<Order> findByCondition(Order order);
    //判断人数是否预约满
    Integer isFull(String orderDateStr);
    //查找可以预约的时间段
    OrderSetting findByOrderDate(Date date);
    //根据订单id查询所有的套餐id
    List<Integer> findSetmealIdsByOrderId(Integer id);
    //根据手机号修改会员名
    void editMemberByPhone(Map map);
    //根据手机号查询会员的id
    Integer findIdByPhoneNumber(String phoneNumber);
    //查询机构地址对应的id
    Integer findAddressByDept(String dept);
    //修改订单成功后修改 订单和地址的关系
    Boolean editOrederAndAddress(@Param("oid") Integer oid,@Param("addressId") Integer addressId);
    //修改订单的基本信息和对应套餐信息
    void editOrderAndSetmeal(Map map);

    //修改滑动开关预约状态
    void statusEdit(Map map);

    //解除order表与address表关联关系
    void deleteOrederAndAddress(Integer id);
    //删除预约订单信息
    void deleteOrderById(Integer id);

    //分页查询和模糊查询
    Page<Map> findByPageAndCondition(HashMap<String, Object> stringObjectHashMap);
}
